home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- # Description: Now that TCP/IP is configured, mount the NFS file
- # systems in /etc/fstab if needed. If possible,
- # start the portmapper before mounting (this is needed for
- # Linux 2.1.x and up).
- #
- # Also mounts SMB filesystems now, so the name of
- # this script is getting increasingly inaccurate.
-
- PATH=/sbin:/bin
- . /lib/init/vars.sh
-
- . /lib/lsb/init-functions
- . /lib/init/mount-functions.sh
-
- do_start() {
- [ -f /etc/fstab ] || return
- #
- # Read through fstab line by line. If it is NFS, set the flag
- # for mounting NFS file systems. If any NFS partition is found and it
- # not mounted with the nolock option, we start the portmapper.
- #
- # If any sec={krb5,krb5i,krb5p} option is given, or any of the file
- # systems are nfs4, we'll need to start rpc.gssd and/or rpc.idmapd too;
- # we'll leave that to nfs-common.
- #
-
- exec 9<&0 </etc/fstab
-
- start_nfs=no
- NETFS=""
- NETDEV=""
- while read DEV MTPT FSTYPE OPTS REST
- do
- case "$DEV" in
- ""|\#*)
- continue
- ;;
- esac
- case "$OPTS" in
- noauto|*,noauto|noauto,*|*,noauto,*)
- continue
- ;;
- _netdev|*,_netdev|_netdev,*|*,_netdev,*)
- NETDEV=yes
- ;;
- esac
- case "$FSTYPE" in
- nfs)
- # NFS filsystems normally require statd and portmap. However,
- # if nolock is set, portmap and statd are not required for this
- # file system.
- case "$OPTS" in
- nolock|*,nolock|nolock,*|*,nolock,*)
- # no action
- ;;
- *)
- start_nfs=yes
- ;;
- esac
-
- # However, Kerberos requires gssd, so start nfs-common anyway.
- case "$OPTS" in
- sec=krb5|*,sec=krb5|sec=krb5,*|*,sec=krb5,*|sec=krb5i|*,sec=krb5i|sec=krb5i,*|*,sec=krb5i,*|sec=krb5p|*,sec=krb5p|sec=krb5p,*|*,sec=krb5p,*)
-
- start_nfs=yes
- ;;
- esac
- ;;
- nfs4)
- # NFSv4 requires idmapd, so start nfs-common no matter what the options are.
- start_nfs=yes
- ;;
- smbfs|cifs|coda|ncp|ncpfs|ocfs2|gfs)
- ;;
- *)
- FSTYPE=
- ;;
- esac
- if [ "$FSTYPE" ]
- then
- case "$NETFS" in
- $FSTYPE|*,$FSTYPE|$FSTYPE,*|*,$FSTYPE,*)
- ;;
- *)
- NETFS="$NETFS${NETFS:+,}$FSTYPE"
- ;;
- esac
- fi
- done
-
- exec 0<&9 9<&-
-
- #
- # Initialize nfs-common (which starts rpc.statd, rpc.gssd
- # and/or rpc.idmapd, and loads the right kernel modules if
- # applicable) if we use Kerberos and/or NFSv4 mounts.
- #
- if [ "$start_nfs" = yes ] && [ -x /etc/init.d/portmap ] && [ -x /etc/init.d/nfs-common ]
- then
- /etc/init.d/portmap start
- /etc/init.d/nfs-common start
- fi
-
- pre_mountall
- if [ "$NETFS" ]
- then
- mount -a -t$NETFS
- fi
- if [ "$NETDEV" ]; then
- mount -a -O _netdev
- fi
- post_mountall
- }
-
- exit_unless_last_interface() {
- grep "^[:space:]*auto" /etc/network/interfaces | \
- sed -e 's/[ \t]*auto[ \t]*//;s/[ \t]*$//;s/[ \t]/\n/g' | \
- while read i; do
- if [ `grep -c $i /var/run/network/ifstate` -eq "0" ]; then
- msg="if-up.d/mountnfs[$IFACE]: waiting for interface $i before doing NFS mounts"
- log_warning_msg "$msg"
- # Can not pass this as a variable because of the while subshell
- mkdir /var/run/network/mountnfs_earlyexit 2> /dev/null
- fi
- done
- if [ -d /var/run/network/mountnfs_earlyexit ]; then
- rmdir /var/run/network/mountnfs_earlyexit 2>/dev/null
- exit 0
- fi
- }
-
- # Using 'no !=' instead of 'yes =' to make sure async nfs mounting is
- # the default even without a value in /etc/default/rcS
- if [ no != "$ASYNCMOUNTNFS" ]; then
- # Not for loopback!
- [ "$IFACE" != "lo" ] || exit 0
-
- # Lock around this otherwise insanity may occur
- mkdir /var/run/network 2>/dev/null || true
-
- # Wait until all auto interfaces are up before attemting to mount
- # network file systems.
- exit_unless_last_interface
-
- if mkdir /var/run/network/mountnfs 2>/dev/null ; then
- :
- else
- msg="if-up.d/mountnfs[$IFACE]: lock /var/run/network/mountnfs exist, not mounting"
- log_failure_msg "$msg"
- # Log if /usr/ is mounted
- [ -x /usr/bin/logger ] && /usr/bin/logger -t "if-up.d/mountnfs[$IFACE]" "$msg"
- exit 0
- fi
-
- on_exit() {
- # Clean up lock when script exits, even if it is interrupted
- rmdir /var/run/network/mountnfs 2>/dev/null || exit 0
- }
- trap on_exit EXIT # Enable emergency handler
- do_start
- elif [ yes = "$FROMINITD" ] ; then
- do_start
- fi
-